//创建service实例
// 0、导入axios
import axios from 'axios'

// 1、设置axios请求参数
axios.defaults.timeout = 5000; //请求超时5秒
axios.defaults.baseURL = '';   //请求base url
// axios.defaults.headers.post['Content-Type'] = 'application/json'; //设置post请求是的header信息

// 2、创建axios实例
const service = axios.create({
    timeout: 60000
})

// 3、请求拦截器
service.interceptors.request.use(config => {
    // 每次发送请求之前，此处做校验
    console.log("请求拦截器调用成功");
    // let token = sessionStorage.getItem('token')
    // if (token) { // 判断是否存在token，如果存在的话，则每个http header都加上token
    //     config.headers = {
    //         'X-token': token
    //     }
    // }
    return config
}, error => {
    console.log("请求拦截器调用失败");
    return Promise.reject(error)
})

// 4、响应拦截器
service.interceptors.response.use(response => {
    // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
    // 否则的话抛出错误
    if (response.status === 200) {
        console.log("响应拦截器调用成功");
        // if (response.data.code === 511) {
        //     // 未授权调取授权接口
        // } else if (response.data.code === 510) {
        //     // 未登录跳转登录页
        // } else {
        //     return Promise.resolve(response)
        // }
        return Promise.resolve(response)
    } else {
        return Promise.reject(response)
    }
}, error => {
    // 我们可以在这里对异常状态作统一处理
    if (error.response.status) {
        // 处理请求失败的情况
        // 对不同返回码对相应处理
        console.log("响应拦截器调用失败");
        return Promise.reject(error.response)
    }
})

// 5、导出实例
export default service

// 6.1、封装get请求导出
/**
 * 封装get方法
 * @param url
 * @param data
 * @returns {Promise}
 */

export function getApi(url, params = {}, headers = {}) {
    return new Promise((resolve, reject) => {
        service.get(url, {
            params: params,
            headers: headers
        })
        .then(response => {
            resolve(response.data);
        })
        .catch(err => {
            reject(err)
        })
    })
}

// 6.2、封装post请求导出
/**
 * 封装post请求
 * @param url
 * @param data
 * @returns {Promise}
 */

export function postApi(url, data = {}) {
    return new Promise((resolve, reject) => {
        service.post(url, data)
        .then(response => {
            resolve(response.data);
        }, err => {
            reject(err)
        })
    })
}
